Journées de l’UMI SOURCE

Author

Lenaïg MOIGN, Florent Bédécarrats

1. OBJECTIFS DE LA FORMATION

Faire des analyses spatiales avec R et notamment :

  1. Travailler avec des données géospatiales open source (base des données sur les aires protégées WPDA)

  2. Croiser ces données spatiales avec des données environnementales, sous la forme d’indicateurs, provenant également d’open data (package mapme.biodiversity)

2. FONCTIONNEMENT DE R STUDIO

A - Interface console

A : Fenêtre d’édition des fichiers source “script” B : Console C : Fenêtre environnement D : Fenêtre multi-onglets

B - Règles de code

Lorsque vous travaillez sur RStudio, il est recommandé de suivre certaines règles de code pour maintenir un code clair, lisible et cohérent.

Voici quelques règles générales à prendre en compte :

  • Nom des variables : Utilisez des noms de variables descriptifs et significatifs pour améliorer la compréhension du code. Évitez les noms de variables trop courts ou cryptiques. Utilisez des noms en minuscules avec des mots séparés par des underscores pour une meilleure lisibilité.

  • Commentaires : Utilisez des commentaires pour expliquer des parties complexes du code, des décisions importantes ou pour fournir des informations supplémentaires. Les commentaires aident à comprendre le code plus facilement, en particulier pour les autres personnes qui pourraient lire votre code ultérieurement.

  • Espacement : Utilisez des espaces pour améliorer la lisibilité. Par exemple, utilisez des espaces autour des opérateurs (comme +, -, *, /) pour distinguer clairement les éléments.

  • Limitation de la longueur des lignes : Essayez de limiter la longueur de chaque ligne de code à environ 80 caractères.Si une ligne est trop longue, vous pouvez la diviser en plusieurs lignes en utilisant des indentations appropriées.

  • Utilisation de parenthèses : Utilisez des parenthèses pour regrouper les expressions complexes et améliorer la lisibilité.Cela aide également à éviter toute ambiguïté dans les opérations.

  • Indentation : utilisez une indentation cohérente pour améliorer la lisibilité de votre code. Généralement, l’indentation est de deux espaces ou de quatre espaces, mais l’important est de choisir une convention et de s’y tenir tout au long du code. Des exemples sont fournis à la fin du notebook, dans la partie “pour aller plus loin”.

C- Raccourcis clavier(image)

D- Fonctions qui vont être régulièrement utilées

select () mutate () filter () summarise()

E- Opérateurs

R Studio est un environnement de développement intégré (IDE) spécialement conçu pour le langage de programmation R.

Lorsque vous travaillez dans R Studio, vous pouvez utiliser différents types d’opérateurs pour effectuer des opérations mathématiques, logiques et de manipulation de données. Les exemples des opérateurs les plus courants sont développés dans la partie “pour aller plus loin”.

3. INSTALLATION ET CHARGEMENT DES LIBRAIRIES R

# INSTALLATION DES LIBRAIRIES R 

librairies_req <- c("tidyverse",# Une série de packages pour faciliter la manipulation de données
                    "readxl", # Pour lire les fichiers excel (Carvalho et al. 2018)
                    "writexl",# Pour écrire des fichiers excel 
                    "gt",# Pour produire de jolis tableaux
                    "sf", # Pour faciliter la manipulation de données géographiques
                    "geodata", # Pour télécharger simplement les frontières administratives
                    "tmap",# Pour produire de jolies cartes 
                    "wdpar", # Pour télécharger la base d'aires protégées WDPA
                    "remotes",
                    "progressr") # Pour importer et analyser des indicateurs de biodiversité

manquantes <- !(librairies_req %in% installed.packages())
if (any(manquantes)) install.packages(librairies_req[manquantes])

# CHARGEMENT DES LIBRAIRIES NÉCESSAIRES AUX PREMIERS TRAVAUX

library(tidyverse)
library(geodata)
library(sf)
library(tmap)
library(wdpar)
library(gt)
library(dplyr)
library(lubridate)
library(tmap)

mapme_version <- installed.packages() %>%
  data.frame() %>%
  filter(Package == "mapme.biodiversity") %>%
  pluck("Built") %>%
  ifelse(length(.) == 0, "", .)

if (!("mapme.biodiversity" %in% installed.packages()) & mapme_version != "4.2.3") {
  remotes::install_github(
    "https://github.com/mapme-initiative/mapme.biodiversity.git")
  }

library(mapme.biodiversity)

4. CHARGEMENT DES DONNÉES SUR LES AIRES PROTÉGÉES

L’initiative WDPA (World Database on Protected Areas) est un projet international visant à recueillir, à gérer et à diffuser des informations sur les aires protégées à travers le monde.

Cette initiative est coordonnée par l’UICN (Union internationale pour la conservation de la nature) et est soutenue par plusieurs partenaires et organisations internationales.

La base de données WDPA constitue une source d’information complète sur les aires protégées, y compris les parcs nationaux, les réserves naturelles, les sites du patrimoine mondial, les aires marines protégées et d’autres types d’espaces préservés.

Elle rassemble des données sur les limites géographiques, les statuts juridiques, les catégories de gestion, la taille, la biodiversité, les écosystèmes et d’autres caractéristiques des aires protégées.

# TÉLÉCHARGEMENT DES DONNÉES DU WDPA AVEC LE PACKAGE WDPAR

# On commence par importer les données libres d'accès, on les enregistre sur 
# le disque local  

if (!file.exists("data/WDPA/WDPA_Jun2023_SEN-shapefile.zip")) {
  WDPA_Senegal <- wdpa_fetch("Senegal", wait = TRUE, 
                          download_dir = "data/WDPA") 
} else {
  # Enregistrement serveur local 
  WDPA_Senegal <- wdpa_read("data/WDPA/WDPA_Jun2023_SEN-shapefile.zip") 
}

5. CHARGEMENT DES CONTOURS ADMINISTRATIFS

# TÉLÉCHARGEMENT DES CONTOURS ADMINISTRATIFS AVEC LE PACKAGE GEODATA

# On commence par importer les données libre d'accès, on les enregistre sur 
# le disque local et on les convertit au format standardisé sf 

if (!file.exists("data/GADM/gadm41_SEN_0_pk.rds")) {
contour_sen <- gadm(country = "Senegal", resolution = 1, level = 0, 
                     path = "data/GADM") %>%  
  st_as_sf() 
  
} else {
  # Enregistrement serveur local 
  contour_sen <- read_rds("data/GADM/gadm41_SEN_0_pk.rds")
}

6. EXPLORATION DES DONNÉES DISPONIBLES SUR LES AIRES PROTÉGÉES

CARACTÉRISTIQUES SPATIALES

On charge de l’information géographique, il est important de connaître les caractéristiques de base des objets à savoir :

Quels types de géométrie ? Quel système de projection ?

# CONNAÎTRE LES GÉOMÉTRIES DE LA COUCHE (POINTS, LIGNES, POLYGONES) 

# On crée une colonne pour connaître la géométrie de chaque observation (mutate) 
# On trie les données en fonction de leur géométrie (group_by) 
# On résume l'effectif total pour chaque catégorie de géométrie (summarise). 

WDPA_Senegal %>%
  mutate(geom_type = st_geometry_type(.)) %>%  
  group_by(geom_type) %>%  
  summarise(n = n())  %>%
  st_drop_geometry() %>%
  gt() # Cette fonction sert à produire un affichage "propre
geom_type n
MULTIPOINT 5
MULTIPOLYGON 133
# CONNAÎTRE LE SYSTÈME DE PROJECTION 
st_crs(WDPA_Senegal)
Coordinate Reference System:
  User input: WGS 84 
  wkt:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4326]]
st_crs(contour_sen) == st_crs(WDPA_Senegal)
[1] TRUE

CONNAÎTRE LES DONNÉES MANQUANTES

Afin d’avoir un aperçu synthétique des données manquantes, il est possible d’exécuter les commandes suivantes.

Pour rappel, la fonction gt() sert à produire de jolis tableaux. Elle arrive en fin de code, une fois qu’on a synthétisé ce que l’on veut retenir comme variables de notre tableau.

La fonction pivot_long() doit être exécutée avant d’utiliser gt() car le package traite la donnée en format “long” et non en format “large” comme c’est le cas pour le moment dans l’objet WDPA Senegal.

# CRÉER UN TABLEAU SYNTHÉTIQUE POUR AVOIR UNE VUE GLOBALE DES DONNÉES MANQUANTES

# On supprime tout d'abord la colonne des géométries pour faciliter le traitement
# On résume les données qui nous intéresse à savoir l'effectif total d'aires
# protégées, les catégories IUCN, année de création et gestionnaire
# La fonction pivot_longer permet de passer d'un format large à un format long
# Ce format est nécessaire pour créer des tableaux stylisés avec la fonction gt
# On ajoute un titre et les sources

WDPA_Senegal %>%
  st_drop_geometry() %>% 
  summarise("Nombre total d'aires protégées" = n(),
            "Catégorie IUCN manquante" = sum(IUCN_CAT == "Not Reported"),
            "Année de création manquante" = sum(STATUS_YR == 0),
            "Gestionnaire manquant" = sum(MANG_AUTH == "Not Reported")) %>%
  pivot_longer(cols = everything(),
               names_to = " ",
               values_to = "Nombre d'aires") %>%
  gt() %>%
  tab_header("Valeurs manquantes dans les données WDPA pour le Sénégal") %>%
  tab_source_note("Source : WDPA (juin 2023)")
Valeurs manquantes dans les données WDPA pour le Sénégal
Nombre d'aires
Nombre total d'aires protégées 138
Catégorie IUCN manquante 101
Année de création manquante 97
Gestionnaire manquant 110
Source : WDPA (juin 2023)

7. PRODUIRE DES CARTES SYNTHÉTIQUES SUR LES AIRES PROTÉGÉES

La table attributaire du WDPA est suffisamment renseignée pour pouvoir produire des cartes thématiques pour mettre en avant une variable de notre jeu de données.

Carte 1. Les différentes catégories d’aires protégées au Sénégal d’après les données satellitaires du WDPA ;

# PRODUCTION DE CARTES THÉMATIQUES ET ESTHÉTIQUES AVEC LE PACKAGE TMAP

tmap_mode(mode = "view") 

tm_shape(contour_sen) +
  tm_borders() + 
  tm_shape(WDPA_Senegal) + 
  tm_polygons(col = "DESIG", alpha = 0.6, title = "Catégories d'aires 
              protégées au Sénégal",
              id = "NAME", 
              popup.vars = c("Type" = "DESIG", 
                             "Catégorie IUCN" = "IUCN_CAT",
                             "Surface déclarée" = "REP_AREA",
                             "Année du statut" = "STATUS_YR"))
tmap_options(check.and.fix = TRUE)

8. ACQUISITION DE DONNÉES ENVIRONNEMENTALES ET CALCUL D’INDICATEURS

Le package mapme.biodiversity

Le package “mapme.biodiversity” facilite l’analyse de données statistiques sur les aires protégées partout dans le monde.

Il permet l’importation d’un nombre important de base de données et le calcul d’indicateurs associés relatifs à la biodiversité qui peuvent être utilisés pour surveiller et évaluer l’efficacité des efforts de protection.

Pour l’analyse des données géographiques, le package utilise sf pour l’exploitation des données vectorielles et terra pour les données rasters.

help(package = "mapme.biodiversity")

Le package permet de calculer, via une importation de données provenant de sources open data, des indicateurs, disponibles sur des intervalles de temps réguliers pour environ deux décennies (2020-2020).

Ces indicateurs permettent aux usagers d’analyser des dynamiques spatiales et temporelles relatives aux aires protégées.

Pour connaître les ressources et les indicateurs associés disponibles :

names(available_indicators())
 [1] "active_fire_counts"           "active_fire_properties"      
 [3] "biome"                        "drought_indicator"           
 [5] "ecoregion"                    "elevation"                   
 [7] "landcover"                    "mangroves_area"              
 [9] "population_count"             "precipitation_chirps"        
[11] "precipitation_wc"             "soilproperties"              
[13] "temperature_max_wc"           "temperature_min_wc"          
[15] "traveltime"                   "treecover_area"              
[17] "treecover_area_and_emissions" "treecoverloss_emissions"     
[19] "tri"                         
# LISTE DES INDICATEURS DISPONIBLES
# active_fire_counts: Calculate active fire counts based on NASA FIRMS
#polygonsactive_fire_properties: Calculate active fire properties based on 
#NASA FIRMS polygons
# biome: Calculate biomes statistics (TEOW) based on WWF
# drought_indicator: Calculate drought indicator statistics
# ecoregion: Calculate terrestrial ecoregions statistics (TEOW) based on WWF
# landcover: Calculate area of different landcover classes
# mangroves_area: Calculate mangrove extent based on Global Mangrove Watch (GMW)
# population_count: Calculate population count statistics (Worldpop)
# precipitation_chirps: Calculate precipitation statistics based on CHIRPS
# precipitation_wc: Calculate precipitation statistics
# soilproperties: Calculate Zonal Soil Properties
# temperature_max_wc: Calculate maximum temperature statistics
# temperature_min_wc: Calculate minimum temperature statistics based on WorldClim
# traveltime: Calculate accessibility statistics
# treecover_area: Calculate treecover statistics
# treecover_area_and_emissions: Calculate treeloss statistics
# treecoverloss_emissions: Calculate emission statistics
# tri: Calculate Terrain Ruggedness Index (TRI) statistics

A la lecture de la liste, l’utilisateur choisit quels sont les indicateurs qui l’intéresse en fonction de ses objectifs d’analyse.

Plus de détails sur les indicateurs (source, unité, limites) sont consultables sur le site : https://mapme-initiative.github.io/mapme.biodiversity/reference/index.html

Constitution d’un portefeuille

Une fois le choix de ressources et d’indicateurs effectué, il faut d’abord initier un portefeuille de la biodiversité. Ce principe de création de porte-feuille est un traitement spécifique qu’on applique à un objet spatial sf.

  • NB : Dans notre cas, pour faciliter le traitement, on va d’abord subdiviser notre objet sf() en géométries de type “polygone” avant d’appliquer la fonction init_portfolio(). L’idée est d’avoir des indicateurs pour chaque partie de l’aire protégée. Il suffira ensuite de fusionner ces polygones pour avoir des résultats globaux pour les aires protégées composées de plusieurs polygones .*

Chaque ligne de l’objet est alors considérée comme un actif unique dans le portefeuille pour lequel des indicateurs environnementaux seront calculés plus loin dans la chaîne de traitement. C’est-à-dire que le portefeuille produit des colonnes imbriquées pour chaque observation, car dans bien des cas, on peut avoir plusieurs valeurs (par année) pour une même observation, voire plusieurs variables.

Par exemple, le calcul de l’indicateur précipitations… plusieurs observations par année…

En créant le portefeuille, certaines vérifications préliminaires seront automatiquement effectuées, par exemple que le SRS de l’objet est EPSG:4326, sinon il sera transformé.

Certains paramètres globaux du portefeuille, tels que le répertoire de sortie pour les ensembles de données téléchargés, un répertoire temporaire pour les calculs intermédiaires, peuvent être définis par l’utilisateur pour avoir un contrôle plus précis du flux de travail. Cependant, ces paramètres sont également définis sur des valeurs par défaut sensibles et peuvent donc être omis lors de l’initialisation du portefeuille.

# EXÉCUTION DE LA FONCTION INIT_PORTFOLIO 

# Avant de créer le porte-feuille, on filtre notre couche WDPA 
# L'idée est de ne garder que les données  pertinentes (années renseignées, 
# et géométries de type polygone ou multi-polygone)
# Certaines aires protégées sont composées de plusieurs polygones disjoints  
# On les scinde volontairement pour les traiter séparement 
# Pour une analyse par AP, on pourra agréger les résultats

WDPA_mapme <- WDPA_Senegal %>%
  filter(STATUS_YR != 0) %>%
  filter(st_geometry_type(geometry) != "MULTIPOINT") %>% 
  st_cast("POLYGON")

WDPA_mapme <- init_portfolio(x = WDPA_mapme, 
                                     years = 2000:2020,
                                     outdir = "data/mapme_Senegal",
                                     add_resources = TRUE,
                                     verbose = TRUE)

Une fois le porte-feuille lancé, on peut récupérer les données de notre intérêt en ligne puis lancer le calcul d’indicateurs pour chaque observation de notre objet sf. Cela peut prendre un peu de temps en fonction du volume de données importées.

1- Le couvert forestier avec Global Forest Watch (GFW)

# Données de Global Forest Watch (GFW) sur le couvert forestier

WDPA_mapme <- get_resources(x = WDPA_mapme, 
                            resources = c("gfw_treecover", "gfw_lossyear"))

if (file.exists("WDPA_mapme_foret.rds")) {
  WDPA_mapme <- read_rds("WDPA_mapme_foret.rds")
} else {
  # Calcul d'indicateurs GFW
  progressr::with_progress({ # Ceci sert à avoir une barre de progression
    # Cette commande calcule les indicateurs à partir des ressources téléchargées
    WDPA_mapme <- calc_indicators(WDPA_mapme,
                                  indicators = "treecover_area",
                                  min_cover = 30, min_size = 1)
  })
  
  write_rds(WDPA_mapme, "WDPA_mapme_foret.rds")
}

2- La surface de mangroves avec Global Mangrove Watch (GMW)

# Données de Global Mangrove Watch (GMW) sur la surface de mangroves 

WDPA_mapme <- get_resources(x = WDPA_mapme,resources = "gmw")


if (file.exists("WDPA_mapme_mangrove.rds")) {
  WDPA_mapme <- read_rds("WDPA_mapme_mangrove.rds")
} else {
  # Calcul des indicateurs GMW
progressr::with_progress({ 
  WDPA_mapme <- calc_indicators(WDPA_mapme,
                                indicators = "mangroves_area")
  })

  write_rds(WDPA_mapme, "WDPA_mapme_mangrove.rds")

}

# ENREGISTREMENT DES DONNÉES GFW + GMW SUR 1 FICHIER RDS

save(WDPA_mapme, file = "data/WDPA_indicators.rds") 

7. TRI DES DONNÉES POUR FACILITER L’EXPLORATION

Désimbrication des indicateurs

Une fois que l’indicateur a été calculé individuellement pour tous les “actifs” du portefeuille, les données apparaîssent sous la forme d’une colonne de liste imbriquée à l’objet d’origine. Si on a plusieurs indicateurs, on aura plusieurs colonnes avec des listes ayant une, deux ou plusieurs variables.

Cette imbrication n’est pas toujours indispensable. Par exemple, pour les variables calculées ici (couvert forestier et surface de mangrove), on ne cherche qu’une valeur par observation. On va donc désimbriquer les données à l’aide de la fonction unnest().

On doit aussi se rappeler que les aires protégées sont parfois composées de plusieurs polygones disjoints et que précédemment, pour l’utilisation de mapme.biodiversity, on a calculé chaque indicateur pour chaque polygone séparément. Pour chaque aire protégée, on va donc faire la moyenne de ces indicateurs, pondérée par la surface respective de chaque polygone.

Nous appelerons ce tableau WDPA_terrain :

# DÉSIMBRICATION DES LISTES D'INDICATEURS 

# On déplie les données des colonnes importées 

WDPA_terrain <- WDPA_mapme %>%
  unnest(c(treecover_area)) %>% 
  unnest(c(mangroves_area)) 

On obtient alors un tableau avec un nombre d’observations important pour un même polygone. Pour un espace donné, plusieurs variables sont mesurées et sur des périodes de temps différentes. Il faut donc maintenant rendre plus lisibles les données, sélectionner l’information avant de procéder à l’analyse statistique.

Sélection des variables les plus pertinentes

Nous faisons le choix de ne garder que certaines variables. Ce choix dépend directement de l’analyse statistique que nous voulons faire derrière.

# SÉLECTION DES VARIABLES PERTINENTES 

WDPA_stats <- WDPA_terrain %>% 
  select(Nom = ORIG_NAME, 
         Surface = REP_AREA, 
         Aire_marine_terrestre = MARINE, 
         Mangrove_surface = mangrove_extent,
         Annees_mangrove = year,
         Couvert_foret = treecover,
         Annees_f = years,
         Categorie = DESIG,
         Annee_creation = STATUS_YR) 

9. EXPLORATION DES DONNÉES AIRES PROTÉGÉES COUPLÉES AUX INDICATEURS ENVIRONNEMENTAUX

Maintenant, il est possible d’explorer ces résultats en vue de les exploiter.

Nous pouvons commencer avec une analyse globale où nous cherchons par exemple à connaître l’état des indicateurs sur une année précise. Quelle est la surface moyenne de forêt et de mangrove en 2020 au sein de chaque aire protégée ?

# RÉSULTATS SUR UNE ANNÉE (2020)

# On filtre d'abord les résultats à l'aide des opérateurs pour ne garder 
# que l'année 2020, on regroupe ensuite les données par Nom (pour avoir le 
# résultat par aire protégée) puis on calcule la moyenne pour l'ensemble
# des polygones 

WDPA_moyenne_2020 <- WDPA_stats %>% 
  filter(Annees_mangrove == 2020, Annees_f == 2020) %>% 
  group_by(Nom) %>%
  summarize(Moyenne_surface_mangrove = format(mean(Mangrove_surface),
                                              scientific = FALSE),
            Moyenne_couvert_foret = mean(Couvert_foret)) 

Nous pouvons aussi filter nos recherches sur une aire protégée. L’idéal serait d’avoir une aire protégée où il y a de la forêt et de la mangrove. Au lieu d’appliquer ces conditions sur l’ensemble du jeu de données, afin de gagner du temps, on choisit de se focaliser sur 2019.

# RECHERCHE D'AIRE PROTÉGÉE CONTENANT DE LA MANGROVE ET DE LA FORÊT

WDPA_moyenne_2020 %>% 
  st_drop_geometry() %>% 
  filter(Moyenne_couvert_foret != 0 & Moyenne_surface_mangrove != 0) %>%
  select(Nom) %>% 
  gt()
Nom
Aire Marine Protégée de Bamboung
Aire Marine Protégée de Kaalolaal Blouf-Fogny
Aire Marine Protégée de Niamone-Kalounayes
Aire Marine Protégée de Sangomar
Aire Marine Protégée du Gandoule
Basse-Casamance
Delta du Saloum
Kalissaye
Réserve Spéciale d’Oiseaux de Kalissaye

Maintenant qu’on a obtenu la liste des aires protégées ayant de la forêt et de la mangrove, nous pouvons revenir à notre tableau précédent et nous focaliser sur une zone d’intérêt.

Exemple de la Basse-Casamance :

# ÉTAT DES INDICATEURS EN BASSE CASAMANCE 

WDPA_Casamance <-  WDPA_stats %>% 
  filter(Nom == "Basse-Casamance") 

On remarque alors que la superficie des aires protégées est en km² alors que les superficies des mangroves et de la forêt sont en Ha, on va donc modifier notre tableau initial pour convertir les Ha en km² et ne plus avoir d’erreur.

Cet exemple confirme l’importance de lire la documentation avant d’utiliser des données.

# CRÉATION D'UNE COLONNE SURFACE EN HA

WDPA_stats <- WDPA_stats %>%
  mutate(Surface_ha = Surface * 100) %>%
  select(-Surface)

PRODUCTION D’UNE CARTE THÉMATIQUE SUR LE COUVERT FORESTIER PAR AIRE PROTÉGÉE

Nous souhaiterions maintenant créer une carte comme cela a déjà été fait précédemment pour mettre en avant la variable de notre choix dans les aires protégées.

Si nous commençons avec le couvert forestier, il faut d’abord créer un nouvel objet WDPA_foret qui synthétise les valeurs par année et par aire protégée.

# CARTE COUVERT FORESTIER 2020 (VOIR POUR RENOMMER COUVERT_FORET)

# On filtre les données que l'on veut présenter sur la carte, à savoir l'année

WDPA_foret_2020 <- WDPA_stats %>% 
  filter(Annees_f == 2020)

# On utilise les fonctionnalités du package tmap()

tm_shape(contour_sen) +
tm_borders() + 
tm_shape(WDPA_foret_2020) + 
tm_polygons(col = "Couvert_foret", alpha = 0.6, title = "Couvert forestier 
            des aires protégées en 2020 au Sénégal",
              id = "Nom",
              legend.format = list(big.mark = ""),
              popup.vars = c("Catégorie" = "Categorie",
                             "Surface déclarée" = "Surface_ha",
                             "Année de création " = "Annee_creation"))

Exemple avec de la mangrove :

# CARTE SURFACE LE MANGROVE DES AIRES PROTEGEES EN 2020 

WDPA_mangrove_2020 <- WDPA_stats %>% 
  filter(Annees_mangrove == 2020)

tm_shape(contour_sen) +
tm_borders() + 
tm_shape(WDPA_mangrove_2020) + 
tm_polygons(col = "Mangrove_surface", alpha = 0.6, title = "Surface de mangrove 
            des aires protégées en 2020 au Sénégal",
            palette = "Greens",
            id = "Nom",
            legend.format = list(big.mark = " "),
            popup.vars = c("Catégorie" = "Categorie",
                             "Surface déclarée" = "Surface_ha",
                             "Année de création" = "Annee_creation")) 

10. POUR ALLER PLUS LOIN :

Exemple d’intentation :

# Pas bien : difficile a lire
if (a>0){
b <- a^2
if (b>4){
c <- log(b)
}else{
c <- exp(b)
}
}else{
b <- -a^2 + 3
c <- NULL
}

# Bien : lisible (il suffit de faire CTRL+I)
if (a>0){
  b <- a^2
  if (b>4){
    c <- log(b)
  }else{
    c <- exp(b)
  }
}else{
  b <- -a^2 + 3
  c <- NULL
}

Exemple d’opérateurs :

  • Opérateurs arithmétiques
#| eval: false 

a <- 10
b <- 5

addition <- a + b  # Addition
soustraction <- a - b  # Soustraction
multiplication <- a * b  # Multiplication
division <- a / b  # Division
modulo <- a %% b  # Modulo
exponentiation <- a ^ b  # Exponentiation
division_entiere <- a %/% b  # Division entière
  • Opérateurs de comparaison
x <- 10
y <- 5

egalite <- x == y  # Égalité
difference <- x != y  # Différence
inferieur <- x < y  # Inférieur à
inferieur_egal <- x <= y  # Inférieur ou égal à
superieur <- x > y  # Supérieur à
superieur_egal <- x >= y  # Supérieur ou égal à
  • Opérateurs logiques
p <- TRUE
q <- FALSE

et_logique <- p & q  # ET logique
ou_logique <- p | q  # OU logique
non_logique <- !p  # NON logique
  • Opérateurs d’affectation
x <- 10  # Affectation simple
y <- c(1, 2, 3)  # Affectation d'un vecteur
  • Opérateurs de concaténation
prenom <- "John"
nom <- "Doe"

concatenation <- paste(prenom, nom)  # Concaténation de chaînes de caractères
  • Opérateurs d’indexation
vecteur <- c(1, 2, 3, 4, 5)
matrice <- matrix(1:9, nrow = 3)
liste <- list(1, "a", TRUE)

element1 <- vecteur[2]  # Indexation d'un élément dans un vecteur
sous_vecteur <- vecteur[2:4]  # Indexation d'un sous-vecteur
element_matrice <- matrice[2, 3]  # Indexation d'un élément dans une matrice
sous_matrice <- matrice[1:2, 2:3]  # Indexation d'une sous-matrice
element_liste <- liste[[2]]  # Indexation d'un élément dans une liste